💙파이썬

Tuple is immutable (unchangeable)

Operation +와*

Nested list, Nested tuple

Set is unordered collections of unique elements. no indexing, no slicing.

Indexing, slicing, operations +와* are not available for set.

immutable : Tuple, Number, String

mutable : List, Set

💙 9월 28일 화 (week 4_2)

💚 파이썬

set은 index 없고, +, * 안된다.

set은 add(), update()란 메소드 있다. a.add(2), a.update({6})

remove(), discard()도 있다. a.remove(4), a.discard({2,3})

remove는 없는 거 뺄려고 하면 에러남, discard는 에러 안남.

tuple은 두가지 메소드만 : index(), count()

list는 11 method : append, extend, inset 등

union (합집합)

intersection (교집합)

difference (차집합)

subset (부분집합)

issubset()이라는 메소드

set은 index()와 count()가 없다. count는 {89}.issubset(a)로 대체 가능하니까!

Dictionary : a value is retrieved by a key. it is unordered.

a = {key:value, key:value}

key는 list, tuple, string 등 아무거나 다 됨.

can't do slicing for a dictionary.

+, *도 안된다. 이거는 list, tuple만 되는 애들임.

dict의 메소드 :

keys()

values()

items()

get()

clear()

💚 AI

이제부터 simple ai model 배울거다.

tensorflow 는 library이고 여러 package 있다. 그중 한 패키지가 keras임.

keras 안엔 여러 모듈 있고, 그 모듈 중 하나가 datasets고, 걔도 여러 모듈 있고, ....

data는 train data와 test data로 나뉨.

train data만 model을 가지고 있다.

test data는 shouldn't be involve model, never!!

그래서 우리는 train data만 생각할거다.

train data는 data, label로 나눠짐.

data는 문제, label은 정답.

imdb는 internet movies data base

data는 예를들어 "this movie is `~~" 의 text data 그런거고

label은 positve(1), negative(0). 그런거임.

attribute(특징), ( ) 불필요

method(메소드), ( ) 필요

88584는 corpus임.

50000개 중 25000는 train data, 25000는 test data

그 50000개의 data는 88584개의 단어종류를 포함한다.

data -> AI model -> label

data의 len는 다 다른데, 256로 고정시키겠다.

long comment, short comment 가 있지만, 256 words로 고정시킴.

길면 자르고, 짧으면 padding(00000...)로 채움. post면 뒤에, pre면 앞에.

💙 9월 30일 목 (week 5_1)

💚 AL, ML, DL

python statement

if, for, while

function

AI, ML, DL을 먼저 배워보겠다.


💚 AI의 네 타입

  1. supreviesed learning

basic learning.

data가 있는데, data엔 Question과 Answer가 있다. 둘 다 준비되어 있다.

이걸 Model에 넣음.

x1과 x2는 각각 feature임.

예, x1는 height(cm), x2는 weight(kg).

병 있으면 O, 없으면 X.

O, X가 answer, 즉 label임.

x1, x2는 question, 즉 feature data임.

그래서 우리는 다른 키, 체중 가진 경우를 예측하는 거임.

  1. un-supervised learning

no label.

feature만 있다.

just plot the data.

group A, group B 정도로만 나눌 수 있음.

이게 supervised learning을 보조함.

  1. semi-supervised learning

no label

  1. reinforcement learning

위 세가지 경우와 완전히 다름.

Go 바둑 게임.

바둑알을 여기다 두면 이길 확률.

이길 확률 높은 걸 계속계속 배움.

agent , reward, state, environment 있음.


💚 if Intelligence is a cake...

Yann LeCun이라는 사람, God of AI

Geoffey Heton은 King of AI

cake 전체는 computer AI brain.

supervised learning은 icing 같다.

reinforcement learning은 cherry 같다.

내부는 unsupervised learning.


💚 unsupervised learning

deep fake는 unsupervised learning임.

clustering

많은 feature data(weight, height, Blood, Heart, ...) 가 있으면,

1000가지 feature 있으면,

dimension reduction을 해야함.

그게 unsupervised learning.


💚 supervised learning의 두가지 요소

supervised learning에는 두가지 있다.

Input : feature data.

Output : label.

둘 다 주어진다.

그리고 supervised learning은

regression problem, classification problem으로 나뉨.


💚 training vs. test

data를 model에 넣음.

model엔 weight 있음.

weight는 100,000, 1million, 1billion 등 많은 값이 있따.

model을 몇 개 정해놓음. Hypothesis(가설).

그리고 learning해서,

weight(model의 optional parameters)를 찾음.

another new data를 trained model에 넣음.

prediction(; estimation) 함.


💚 feature vs. label

data in supervised learning : feature, label

  1. feature (input, question)

: form이 많다.

(1) table data or time-series data :1D

(2) Image : 1frame. 2D or 3D : 많은 channel 있다. CT, MR, US 등의 이미지는 DICom image임.

(3) video : 3D or 4D : 30frame/sec 등으로 표현.

  1. label (output, answer)

: classification problem.

(1) binary label : malignat of benigh : 0 or 1.

(2) multi-label : 0,`,1,2,.... :

kaggle.com엔 AI computation이 있다.

prize 탈 수 있다.

6 elements로 구성된 1 list가 label 결정. 즉, one-hot Encoding.

data를 training, etst로 바꾸는 비율은 보통

8:2, 7:3, or 9:1

test data는 꼭 isolated 되어있어야 함.


💚 여러가지 ML algorithms

ML alrogithm에는 여러가지가 있다.

regression problem

feature data로서 size 가 있다. only 1 feature.

output, label은 달러임.

일단은 걍 feature가 하나만 있다고 가정하자.

빨간 점이 whole data임.

modeling해서 hypothesis를 세우자. linear pattern이라고.

y=wx+b로. w는 slope, b는 intersection.

두개의 파라미터가 있는 것이다.

every single value는 x,y가 있는거니까 그걸 y=wx+b에 대입.

2 parameter니까 2 equation만 있으면 된다.

근데 여러 가지 해봐가지구 w, b 찾는거다.

💚 Linear Regression 개념

boston housing dataset

14개의 features 있다.

y = w1x1 + .... + w13x13 + b로 식 세울 수 있다. (linear regression이면!)

1. data

먼저, from tensorflow.keras import datasets를 한다.

train_data에는 13 features 있음.

1.1 data analysis

13 feature data가 404개임.

train_data[0]

train_data.shape 하면 (404, 13) 나옴. 2 dimension임.

train_label.shape하면 (404,) 나옴. 즉, 1 dimension임.

(404,1)는 2D로 간주함.

train_data[0] 하면 array([ ?,?,?, ? ..., ?])임.

train_data[0]는 13 elements의 list이고, train_data[403]까지 있음.

test_data.shape 하면 (102,13)가 나옴.

test_label.shape 하면 (102,)가 나옴.

2. Linear Regression Algorithm Modeling (Hypothesis)

🔥의 세 줄만 하면 다 되는거임....!!!!!!!!!!!!!!!!!!!!!!!!!!

from sklearn.linear_model import LinearRegression 🔥

model = LinearRegression( ) 🔥

(c.f. 대문자로 시작하면 class임. model은 instance(; object)고, Linear Regression은 class임.)

(c.f. a = 1 에서 a는 instance임. a.하면 여러 attribute와 method 나옴.)

(c.f. model. 하면 여러 attribute와 method 나옴.)

3. Training

model.fit( train_data, train_label ) 🔥 # fit은 train a model을 의미. w1x1+ ... + w13x13 쓰고 training까지 다 끝남.

4. Evaluation

🍓1🍓 Linear Regression 코드

💙 10월 05일 화 (week5_2)

🍓1🍓 Linear Regression 코드 _ 복습

💚 Linear Regression vs. Logistic Regression

: regression

가로축 feature, 세로축 label

y=wx+b를 찾는거임.

w와 b 찾기

find optimal one. (minimum error인 것으로)

: for classification

가로축 module size, 세로축 양성인지, 음성인지.

세로축은 B(benigh) 아니면 M(malignant)임.

만약 이 문제를 linear regression으로 하면, y=ax+b꼴로 해야되는거니까, more data 점점 추가될 수록 그 기울기가 점점 작아질 것임.

x축이 0.5인 지점을 다 통과하는데, 모듈 추가됨에 따른 그래프가 기울기, y절편이 다 다름. (slope는 biased 됨, accuracy가 not high.)

화면 캡처 2021-10-15 192743.jpg

화면 캡처 2021-10-25 190808.jpg

💚 SIgmoid (logis regression이 쓰는 함수)

Sigmoid function

320px-Logistic-curve.svg.png

화면 캡처 2021-10-05 105902.jpg

y=시그모이드(wx+b)

에서 wx+b가 아무리 크거나 아무리 작아도

범위가 0~1 사이임.

y = w1x1 + w2x2 + ... + b 를 찾기 (w1, w2, ..를 찾는 방법은 얘기 안해줬음.)

얘는 fit을 쓰면 알아서 w1, w2, .... 를 찾아줬었음.

y = 시그모이드(w1x1 + w2x2 + ... + b) 를 찾기 => gradient descent method를 배울거임(?)

gradient dscent를 쓰면 알아서 w1, w1, .... 를 찾아줌.

🍓2🍓 Logistic Regression 코드

Breast Cancer Dataset으로 연습해보자.

전에는 datasets.boston_hosing.load_data()가 저절로 training data와 test data가 들어갔음.

근데 이거는 그냥 data만 569개가 주어지는 거임. 나뉘어서 주어지는 게 아니구.

그래서 이걸 train data와 test data로 우리가 split 해주어야 해.

지금 이렇게 data가 train과 test용으로 나뉘어져서 주어지는지, 그냥 통째로 주어지는지는 housing 문제와 cancer 문제 특성에 따른 차이인가요, 아니면 linear regression, logistic regression 차이 인가요?

keras는 datasets 있다. boston housing,.. 등등

sklearn은 datasets 있다.boston housing, breast cancer, ... 등등

keras는 train_data, train_label, test_data, test_label으로 나누어서 주어짐.

sklearn은 그냥 통째로 주기 때문에, from sklearn.model_selection import train_test_split 으로 우리가 스스로 나눠야 함.

sklearn이 realistic 문제랑 비슷한거지. keras처럼 나눠서 주어지는 게 아니니까....

이제 잘 나뉘어졌네!

y = sigmoid ( w1x1 + w2x2 + ... + w30x30 + b )

sigmoid(x) = 1/ (1+exp(-x))

30개의 feature 중 which feature(parameter)가 중요할까?

맨 뒤에꺼가 제일 중요.

매번 시도할 때마다 다름.

gradient descend method 에 따라 w1~w30가 ramdom number로 책정되기(?) 때문이다.

c.f.) linear regression으로 해보기

c.f. ) 파이썬에서 비교해보는거 : ==로 함.

💙 10월 7일 목 (week6_1)

💚 여러 algorithms 🍓

Linear regression : regression only

logistic regression : classification only

K-NN, SVM, Decision Tree, Random Forest, XGBoost : both regression and classification

💚 K-Nearest Neighbors (k-NN) 개념

화면 캡처 2021-10-07 104514.jpg

가로축 : 할당량이라는 feature

세로축 : HBP라는 feature

o : cardiovascular disease

x : healthy

train model하지 않는다.

화면 캡처 2021-10-07 104611.jpg

k = 3라 하면, 세모에서 가까운 세 개 찾음.

2개가 o, 1개가 x니까

세모는 o라고 판단 내림.

k=5라 하면 o:x = 3:2니까 역시 o라고 판단.

화면 캡처 2021-10-25 192734.jpg

🍓3🍓 KNN 코드

same as above

💚Support Vector Machine (SVM) 개념

화면 캡처 2021-10-07 112135.jpg

화면 캡처 2021-10-07 112650.jpg

support vector간 거리 : width = w

w가 maximize되는 게 좋다.

근데 문제는,

화면 캡처 2021-10-07 112855.jpg

이런 데이터는 못..함...

화면 캡처 2021-10-07 112958.jpg

이렇게 하기야 하겠지만 못하는 애들(panelty)가 있음.

slack(원래 support vector로부터의 거리), panelty constant를 최소화 해야함.

penalty x penalty constant

딜레마 : maximize w를 해야하면서, minimize penalty 해야함.

화면 캡처 2021-10-07 113524.jpg

그림처럼 원형인 데이터는 x는 위로, o는 아래로 내려서 분류할 수 있음.

gaussian kernel function

화면 캡처 2021-10-25 192824.jpg

화면 캡처 2021-10-25 192900.jpg

🍓4🍓 SVM 코드

cancer는 dictionary type이고, key인 'data'를 data에 넣음.

key인 'target'을 target에 넣음.

이것은 supervised learning임.

그 다음은 split data를 함. train과 test로!

random_state = ??어떤 숫자를 해줌으로써 seed를 딱 해줌. 안바뀌게!

그 다음은 # Model training

model = SVC() class의 instance를 model에 넣음.

model.fit(train_data, train_label) 하면 train 다 된거임.

그 다음은 # Evaluation

prediction이랑 test_label 이랑 비교함.

https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

💙 10월 12일 화 (week6_2)

💚 SVM 복습

코드 맨 첫부분엔 import library를 한다.

지난시간엔 SVC (support vector machine)를 짧게 설명했다.

이거 다 배울라면 1달 넘게 걸림...

이젠 더 디테일하게 SVC 배우겠따!

2D 그래프,

가로축 x1(feature)

세로축 x2(another feature)

circle들과 x들이 있다.

화면 캡처 2021-10-16 123709.jpg

SVC는 그 경계를 찾는 것! support vector를 찾는 것임.

support vector와 중심선은 curve가 아니고 line임.

중심선이 hyper plane임.

화면 캡처 2021-10-16 123841.jpg

3D 그래프

x1, x2, x3의 세가지 feature이 축임.

이것도 마찬가지로 plane으로 영역 구분 가능.

4D 면 3D로 영역 구분,

5D 면 4D로 영역 구분.

뭐가됐든 어쨋던 hyperplane임.

hyperplane은 2 group으로 seperating하는 애임. => seperating hyperplane (line, plane, 3D, 4D 등등일 수 있음.)

화면 캡처 2021-10-16 124120.jpg

2D 문제에서, hyper plane은 w1x1 + w2x2 + b로 표현 가능.

첫번째그룹 : w1x1 + w2x2 + b >= 0 임. (동그라미들)

두번째그룹 : w1x1 + w2x2 + b < 0 임. (엑스들)

젤 가까운 동글은 +1,

젤 가까운 엑스는 -1

젤 가까운 동글은 w1x1 + w2x2 + b = +1

젤 가까운 엑스는 w1x1 + w2x2 + b = -1 이다.

화면 캡처 2021-10-16 124219.jpg

화면 캡처 2021-10-16 124310.jpg

젤 가까운 동글 과 w1x1 + w2x2 + b = 0 line과의 거리는,

| w1x1+ w2x2 + b | / (w1^2 + w2^2 )^(0.5)

= 1 / (w1^2 + w2^2 )^(0.5) = 1/ |w|

화면 캡처 2021-10-16 124347.jpg

화면 캡처 2021-10-16 124507.jpg

support vector간 whole distance는 2 / (w1^2 + w2^2 )^(0.5) = 2/ |w| 이다.

support vector machine은 그 거리를 maximize 해야 한다. 즉, margin을 maximize 하는 것. 2 / |w| 를 mximize 해야 함.

이걸 하기 위해, 역수를, 즉 (w1^2 + w2^2 )^(0.5) / 2를 minimize 해보자!!

즉 w1^2 + w2^2 를 minimize 해보자!

이건 two features니까 이런 식이 나온 거임.

화면 캡처 2021-10-16 125230.jpg

만약 1000 features 문제였더라면 (w1^2 + w2^2 + ... + w1000 ^2 )^(0.5) 를 minimize 해야햇을 거임.

이건 결국 (1/2) w ??????????????

largrange 라그랑주가 이 fomulation 찾음.

💚 SVM의 2 issue

🧸 1. not always seperable : line만으로 완벽히 o과 x를 나눌 수 없다 ㅜ.

1/2 w벡터T w벡터 + c*Sum( ) 를 minimize 해야함.

우리는 optimal c를 찾아야 함!!

원래는 c = 3, c =5 이런걸로 했었음.

penalty를 얼마나 줄지가 c 임.

화면 캡처 2021-10-16 130433.jpg

🧸 2. 만약 x가 가운데에 원모양이구, 그 주변을 o가 둘르고 있다면, linear equation인 w1x1+w2x2 + w3x3 + ... 가지고는 표현 불가능. 그래서 변경(transfer, transform) 해줘야 함.

이건 gaussian 모양이다. 가운데에 x가 몰려있으니까. 3D로 바꿔서 위에있는 게 x, 아래있는 게 o라고 plane으로 나눔.

rbf : radial basis function 가지고 함.

화면 캡처 2021-10-16 131306.jpg

w1x1 + w2x2 + b 와 같은 문제였더라면

w1x1^2 + w2 x2^2 + w3 x1x2로 바꿈.

w1x1 + w2x2 + w3x3 + b 와 같은 문제였더라면

w1x1^3 + w2 x2^3 + w3 x3^3 + w4 x1x2x3 + w5 x1제곱 x2 + w6 x1제곱 x3 + w7 x2제곱 x1 + .... 꼴의 polynomial로 바꺼야댐.

화면 캡처 2021-10-16 131605.jpg

kernel 값은 default = 'rbf'임. 'linear', 'poly', 'rbf'로 할 수 있음 (?)

rbf에서 degree= 3 가 default임. degree =5 면 다 5승임.

model = SVC (kernel = 'poly', degree = 5)로 바꿀 수 있음.

rbf 방법이 제일 popular, 근데 어떤 경우는 poly가 나을 수도.

결국 우리는 C, kernel, degree를 결정해야 함.

Q ) 방금 알려준 위 아래로 나누는 게 rbf라는 거임 아님 poly란 거임? 그리고 왜 rbf가 디폴트임??

🧸 SVC랑 SVR 있음.

💚 Decision Tree 개념

화면 캡처 2021-10-16 132410.jpg

//43쪽

decision tree

root에서 internal node로까지만, 즉 첫번째로 갈라지는 게 depth1

leaf node까지 갈라지는 게 depth 2

우리는 information gain을 maximize해야함. 어케 갈라지는지를 최대한 자세히(?).

화면 캡처 2021-10-16 132719.jpg

//44 symbol notation

parent node와 child node 있다.

Dp : 부모의 dataset

Np : 부모의 number of samples

Impurity를 계산할 수 있다.

화면 캡처 2021-10-16 133016.jpg

'#1' : 50퍼의 정확도임. higher impurity

(부모) 병있는 그룹 100, 건강 그룹 100을

(자식1) 병50, 건강50

(자식2) 병50, 건강50

으로 나누고 싶음.

'#2' : 이게 더 나은 방법임. 80퍼의 정확도. lower impurity

(부모) 병있는 그룹 100, 건강 그룹 100을

(자식1) 병20, 건강80

(자식2) 병80, 건강20

으로 나누고 싶음.

dicision tree는 2 group으로 나누는 거임.

두 그룹간 차별을 둬야 함. discriminate two groups.

last group은 only 1 group should be.

'#2' 처럼 되려면, impurity를 낮춰야 함.

자꾸자꾸 자식으로 내려갈 수록 impurity를 낮춰야 함.

화면 캡처 2021-10-16 133428.jpg

I-G(t)는 Gini impurity at the node t

impurity 계산하는 방법은 ~~~

세번째 그림은 only one group 이니까 pure하고, impurity=0

node가 impurity = 0 될 때까지 반복하는 거임.

맨 왼쪽이 worst, 맨 오른쪽이 best.

화면 캡처 2021-10-16 134023.jpg

I_H (t) Entroyp at the node t

맨 왼쪽이 I_H(t) = 1 , 안좋다

맨 우측이 I_H(t) =

화면 캡처 2021-10-16 134106.jpg

가운데가 50:50, gini impurity 최대인 곳, entropy가 최대인 곳.

둘이 비슷하니까 원하는 거 하믄 돼.

sklearn 에선 gini impurity가지고 평가하는 게 default임.

화면 캡처 2021-10-16 134231.jpg

parent node가 worst

gini 가지고 평가해보니, parent는 0.5임.

자식1은 ~~~.

자식 2는 ~~~.

자식1에게 갈 애들은 0.32 * (50/200)

자식에게 갈수록 impurity 적어짐./

informaion gain인 IG(Dp,f) 을 maximize 해야 함.

왼쪽보다 오른쪽이 나음.

이게 Deicision Tree란 거임.

c.f.)

화면 캡처 2021-10-16 132841.jpg

🍓5🍓 Decision Tree 코드

decision 해볼라구 tree 해보겠다

💡 model = DecisionTreeClassifier() 에서의 파라미터

💡 파라미터 : criterion 은 디폴트가 'gini'임. 이거 말고 'entropy'로 해두 댐.

💡 파라미터 : splitter = 'best' 는 maximize information gain 하게 해주는 것.

💡 파라미터 : max_depth = None 이다. max_depth를 정할 수도 있음. 요게 가장 중요한 파라미터. performance는 나빠지겠지만 일단 뭐... 너무 깊은 deep tree는 accuracy가 나빠짐. 너~무 많이 해서.

ex) model = DecisionTreeClassifier(max_depth = 4) 등으로 할 수 있음.

💡 파라미터 : min_samples_split = 2 가 디폴트임.

💚 Random Forest 개념

Random forest 를 설명하고 끝내겠다.

decision tree가 가끔 bad performance 보여줌. 왜 그럴까? 를 생각해봤더니

oulier가 affects the decision tree.

그래서 어케 modify 할까..?

small decision tree 만들자!

예를들어, 1000 data, 100 features 가 원래 있는 문제인건데,

랜덤히 뽑힌 100 data, 10 features 갖고만 tree 만들고,

또 다른 걸로 tree 만들고 함.

숲을 만듦.

각 나무는 decision 있다.

그리고 이제 각 나무들 중 vote한다.

💙 10월 14일 목 (week7_1)

🍓5🍓 Decision Tree 코드

우리는 30 features 있다. for each patient.

0(malignant)인지 1(benign)인지 결정함.

어떤 feature는 중요, 어떤 feature는 별로 안중요.

그래서 어떤 feature가 중요한지 결정해야 함.

이제 얘를 정렬해보자.......

💚 decision tree 예시

화면 캡처 2021-10-25 203459.jpg

Decision tree 예제.

XGBoost 오늘 배울꺼임.

XGBoost로 top 3 feature 뽑았고, 그게 LDH, hs-CRP, Lymphocyte 임.

이거가지고 죽을지, 살을지 결정.

우리는 sklearn으로 한다. import sklearn

💚 Random Forest 개념

many, small decision tree

new data가 각 tree에 들어가고,

각 tree가 results 만들어냄 : A, B, A, A, B, A, B, B, A

4A와 3B 이므로 결론은 A이다.

🌟 Many decision trees + bagging(Bootstrap Aggregating) + Feature Randomness

Bagging : random data sampling with replacement. 만약 3 data가 있는데, 중복을 허용해서 3개 선택함. ex) 2 1 2 이렇게 선택됨. 1000 data 있고, 1000 data를 뽑고 싶은 거라면, 그 1000 data엔 same data may exist. 그래서 원래의 1000data랑 뽑힌 거랑 다름.

Randomness : 랜덤하게 뽑음.

화면 캡처 2021-10-25 193144.jpg

화면 캡처 2021-10-25 193153.jpg

화면 캡처 2021-10-25 193200.jpg

🍓6🍓 Random Forest 코드

이 방법이 decision tree 그거보다 더 정확함.

근데 그때그때 다름.

random_state = 999 이렇게 해줬는데 왜 다를까?

every single tree가 different data를 가짐.

또, feature가 random selected 되어서 그때마다 달라지는 것임.

💡 model = DecisionTreeClassifier()의 파라미터

💡 n_estimators = 100. small tree의 개수

💡 criterion = 'gini'. 아니면 'entropy' 가능.

💡 max_depth

💡 min_samples_split = 2

💡 min_samples_leaf = 1

💡 max_features = 'auto'. how many feature do you want to choose. default인 'auto'는 sqrt(n_features) 임. 100 feature면 이거 10로 함. 우리는 30feature니까 약 5.몇이니까 5개 선택함.

💡 bootstrap = True 는 randomly 하고 중복 허용. 1000sample 있었으면 1000sample 선택. (개수 같게) 만약 False로 하면 original data로 걍 한단 소리임.

💡 max_samples = None이고, int나 float로도 가능. none이면 기존 data를 그대로 사용(ex.1000개 데이터 있으면 그 1000개 그대로 다 사용), int인 100으로 하면, 100개의 data 가져와서 사용. floating이라고 쓰면, 0.1이라고 쓰면 10퍼만 갖고온다는 뜻.

화면 캡처 2021-10-25 214251.jpg

n_estimgators = 1000, bootstrap = 200, max_features = 3 로 하면,

🍓7🍓 XGBoost 코드

💚 XGBoost 개념

이게 제일 powerful

sklearn은 XGBoost 지원 안함.

from xgboost import XGBClassifier

model = XGBClassifier()

화면 캡처 2021-10-16 145928.jpg

화면 캡처 2021-10-16 150138.jpg

4 data (주황, 연두, 연두, 주황) 있다고 하자.

drug dosage 따른 효과 있는지 없는지 판단. 즉 feature가 걍 한 개만..

8, 12 여야 effective (1) 5, 15면 non effective (0)

먼저, all initial prediction probability of 0.5 regadless of the dosage.

몇 mg이더라도 다 확률 0.5라고 해놓고 시작.

Residual : the differences between the observed and predicted values.

화면 캡처 2021-10-16 150417.jpg

Similarity scores 얻음.

(식)

(0.5) * (1-0.5) + 0.5 x (1-0.5) + 0.5 x (1-0.5) + 0.5 x (1-0.5)

-0.5 + 0.5 + 0.5 - 0.5 를 square

이건 0임.

람다는 0 만드는 거 (?)

화면 캡처 2021-10-16 150629.jpg

화면 캡처 2021-10-16 150704.jpg

Make a tree

root로부터 leaf 찾아야 함.

이 네개를 나누는 방법엔 3가지 있음.

3:1, 2:2, 1:3

화면 캡처 2021-10-16 150909.jpg

impurity랑 similarity랑 반대임

root는 impurity 크고(안좋음) , similarity 작다.

child 로 갈수록 impurity 줄여야 하고, similarity 커져야 함.

🍰 XGBoost

simularity score로 각각각 네모 판단

simularity score이 자식으로 갈수록 up 된다.

Information Gain =

( child_left similarity + child_right similarity ) - Parent similarity

🍰 Decesion Tree

impurity score이 자식으로 갈수록 down 된다.

Information Gain =

Parent Impurity - ( child_lefr impurity + child_right impurity )

화면 캡처 2021-10-16 151415.jpg

화면 캡처 2021-10-16 151503.jpg

화면 캡처 2021-10-16 151607.jpg

💙 10월 19일 화 (week7_2)

💚 XGBoost

화면 캡처 2021-10-25 210137.jpg

각 leaf는 number가지고 있다.

data -> blackbox -> 3 (number)

output이 2이기도 함. 즉, 걍 숫자임.

output이 나오는 확률이 있음. related to probability

blackbox에 따라 3이 나오는 확률 있고, 2 나오는 확률이 따로 있음.

확률은 0~100% 임.

0.5는 50% 의미.

0.7는 70% 의미.

근데,,,,,,,,,,, 3이라고 나오면 확률이 뭔지 어케 알지?

혹은 output이 -4면?

작은 숫자가 더 작은 확률임.

이걸 0~1로 어케 바꿀까?

화면 캡처 2021-10-25 210035.jpg

p는 0~1 값 갖는 확률.

odds = p/(1-p) 로 정의됨.

p에 따라 odd가 그래프가 이런 꼴임.

p가 0~1이면

odds는 0~무한대

화면 캡처 2021-10-25 210738.jpg

probability to log

odd에 log 취함.

그러면 log odd 는 -무한 ~ 무한

화면 캡처 2021-10-25 210915.jpg

Probability = ~~~~

블랙박스에 data 넣으면

그 결과(확률을 의미)가 -무한 ~ +무한으로 나옴.

블랙박스의 결과가 -2 +2 -2 면

-2, +2를 odd에 넣어서 probability 구할 수 있따

화면 캡처 2021-10-25 211210.jpg

Soft max 는

image인 data를 넣으면

deep neural network인 model이 3 things(곰, 개, 고양이)로 classify 하는 model이,

곰이라고 판단해야 함.

bear 37, cat -1 dog -2 로 결과 냄.

~ 로 계산해서 개에 대한 확률,

고양이 확률,

곰일 확률을 계산할 수 있다.

개일 확률 :

exp(-2) / exp(-2) + exp(-1) + exp(37)

XGBoost로 하니까 전보다 더 빨강, 연구 구분 잘하게 됨.

화면 캡처 2021-10-25 211659.jpg

learning weight인 0.3을 조절할 수 있음.파라미터로써. deafult는 0.1임.

그럼 output인 -2가 -0.6인 셈임.

그 -0.6을 확률식에다가 넣는거임.

화면 캡처 2021-10-25 211736.jpg

화면 캡처 2021-10-25 211832.jpg

이렇게, 처음보다 확률이 달라졌음.

s.jpg

이 경우에 similarity scores left, right, gain 구해보니 이와 같음.

XGBClassifier() 안에 넣을 수 있는 파라미터

learning_weight = 0.1가 default임.

❤️ 중간고사